#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+1;
vector <int> f[MAXN],G[MAXN];
int len[MAXN],lson[MAXN],ans[MAXN];
/*f[i][j] -> # subtree(i), dist = len[i]-j*/
inline void dfs(int p,int fa) {
for(int v:G[p]) {
if(v==fa) continue;
dfs(v,p);
len[p]=max(len[p],len[v]+1);
if(len[lson[p]]<=len[v]) lson[p]=v;
}
}
inline void solve(int p,int fa) {
if(!lson[p]) {
f[p].push_back(1);
ans[p]=0;
return ;
}
solve(lson[p],p);
swap(f[lson[p]],f[p]);
ans[p]=ans[lson[p]];
f[p].push_back(1);
if(f[p][ans[p]]==1) ans[p]=len[p];
for(int v:G[p]) {
if(v==fa||v==lson[p]) continue;
solve(v,p);
for(int x=0;x<=len[v];++x) {
int d=len[p]-(len[v]-x+1);
f[p][d]+=f[v][x];
if(f[p][d]>f[p][ans[p]]||(f[p][d]==f[p][ans[p]]&&d>ans[p])) ans[p]=d;
}
}
}
signed main() {
int n;
scanf("%d",&n);
for(int i=1;i<n;++i) {
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1,0);
solve(1,0);
for(int i=1;i<=n;++i) printf("%d\n",len[i]-ans[i]);
return 0;
}//9686451989973131033
415. Add Strings | 22. Generate Parentheses |
13. Roman to Integer | 2. Add Two Numbers |
515. Find Largest Value in Each Tree Row | 345. Reverse Vowels of a String |
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |
1051. Height Checker | 695. Max Area of Island |
402. Remove K Digits | 97. Interleaving String |
543. Diameter of Binary Tree | 124. Binary Tree Maximum Path Sum |
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts | 501A - Contest |
160A- Twins | 752. Open the Lock |
1535A - Fair Playoff | 1538F - Interesting Function |